//
//  YHUserAccountTool.swift
//  XLWB
//
//  Created by key on 16/6/26.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit

class YHUserAccountTool: NSObject {

    //MARK: - 创建全局模型数据对象
    var userAccount: YHAccountModel?
    
    //MARK: - 重写init方法
    override init() {
        
        super.init()
        
        userAccount = getUserAccount()
    }
    
    //MARK: - 创建单例
    static let sharedUserAccountTool: YHUserAccountTool = {
        
        let tool = YHUserAccountTool()
        
        return tool
    }()
    
    
    //MARK: - 模型是否有数据 判断用户是否已经登录 只读属性
    var accessToken: String? {
        
        //判断
        if userAccount?.access_token == nil { //没登录
            
            return nil
        }else{
            
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending { //过期时间和当前时间进行对比  如果是降序 即当前时间 小于 过期时间 则 表示还未过期 有token数据可以返回
                
                return userAccount?.access_token
                
            }else { //已经过期了  则返回nil
            
                return nil
            }
            
        }
        
        
    }
    
    //MARK: - 定义属性 判断程序运行起来加载的界面 bool类型的只读属性 根据用户是否登录判断
    var islogin: Bool {
        
        return accessToken != nil //是nil 则相同 返回false   不是nil 则不同 返回ture
        
    }
    
    
    
    //MARK: - 沙盒操作
    //获取沙盒路径
    let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("accountModel.data")
    
    //存入沙盒
    func saveUserAccount(accountModel: YHAccountModel) {
        
        //存入沙盒时  给全局模型数据对象 赋值  只要程序不退出  就可以直接从模型对象获取数据 不必惊扰沙盒
        self.userAccount = accountModel
        
        NSKeyedArchiver.archiveRootObject(accountModel, toFile: path)
        
    }
    
    //从沙盒中获取数据
    func getUserAccount() -> YHAccountModel? {
        
        
        let accountModel = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? YHAccountModel
        
        return accountModel
        
    }
    
    
    
}
